// FWin32System_Local.h (c) 2011 JV Software
//

#define SYS_API     __declspec(dllexport)

#include "Engine.h"

//
// FWin32Window
//
class FWin32Window : public FWindow {
friend class D3DDeviceDrv;
public:
	virtual void			Init( void *hinst, FString title, FString classname, int width, int height );
	virtual void			Show( void );
	virtual void			Hide( void );

	virtual void			Destroy( void );

	virtual void			*GetHandle( void ) { return hwnd; };
	virtual int				GetWidth( void ) { return _width; };
	virtual int				GetHeight( void ) { return _height; };
private:
	HWND			hwnd;
	int				_width;
	int				_height;
};

//
// FWin32System
//
class FWin32System : public FSystem {
public:
	virtual FWindow			*AllocWindow( void );
	virtual void			FatalError( FString fmt, ... );
	virtual FModule			*LoadModule( FString path );
	virtual void			UnloadModule( FModule *module );
	virtual void			Shutdown( void );
};

//
// FWin32Module
//
class FWin32Module : public FModule {
public:
	virtual bool			Load( FString path ) { 
								_handle = LoadLibrary( path.c_str() ); 

								if(_handle == NULL) {
									return false;
								}

								return true;
							};

	virtual void			*GetProcAddress( FString apiName ) { return ::GetProcAddress( _handle, apiName.ToAnsiPtr() ); };
	virtual void			Unload( void ) { FreeLibrary( _handle ); };
private:
	HMODULE			_handle;
};

extern FWin32System		win32Local;